The present application relates generally to an improved data processing apparatus and method and more specifically to mechanisms for automatically managing the storage of a virtual machine.
A virtual machine (VM) is a software implementation of a machine (i.e. a computer) that executes programs like a physical machine. Virtual machines are separated into two major categories, based on their use and degree of correspondence to any real machine. A system virtual machine provides a complete system platform which supports the execution of a complete operating system (OS). These usually emulate an existing architecture, and are built with the purpose of providing a platform to run programs where the real hardware is not available for use (for example, executing software on, otherwise, obsolete platforms) or having multiple instances of virtual machines lead to more efficient use of computing resource, both in terms of energy consumption as well as cost effectiveness (known as hardware virtualization, the key to a cloud computing environment), or both. In contrast, a process virtual machine (also, language virtual machine) is designed to run a single program, which means that it supports a single process. Such virtual machines are usually closely suited to one or more programming languages and built with the purpose of providing program portability and flexibility (amongst other things). An essential characteristic of a virtual machine is that the software running inside is limited to the resources and abstractions provided by the virtual machine it cannot extend outside of its virtual environment.
Server based virtual machines are one way in which computing power and storage may be provided to client applications as a service. That is, for each client application session, or for a plurality of client application sessions, from the same or different client computing devices, a client virtual machine may be created on the server computing device that represents a separate instance of the server computing device, and associated resources, for that client application session or plurality of client application sessions. This client virtual machine may have its own instance of an operating system, allocated virtual memory resources, and the like.
However, as mentioned above, client application processes are limited by the resources allocated to the virtual machine. In order to modify such allocation of resources, a skilled human operator must manually reconfigure the allocation of resources and even modify the physical resources of the physical machines to accommodate the need for more resources. This process can be very complex in environments where client segregation is present and virtual machines are connected to segregated networks. Client segregation refers to public clouds or, more generally, multi-tenant environments, where cloud resources (compute, storage, and networks) can be dedicated to tenants. The cloud infrastructure must guarantee that those resources are kept separate and secured so that only the assigned tenant can access them in a secure way. Thus, virtual machines and storage devices must be configured to be accessed only from the networks dedicated to the tenant, i.e. must be segregated. Managing a multi-tenant environment adds complexity because the cloud environment must be more sophisticated to guarantee segregation of resources and the quality of service per each tenant. The cloud environment must manage the resource pools and the quota of resources that each tenant can use on the pools with over-commitment policies possibly being in place to optimize the use of the resources across tenants. In such an environment, a process of reconfiguring a virtual machine is more critical and error prone compared with a private, single tenant environment.